<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>3.姓名案例_计算属性实现</title>
		<!-- 引入Vue -->
		<script type="text/javascript" src="../js/vue.js"></script>
	</head>
	<body>
		<!-- 
				计算属性简写方式的总结：
					1.定义：要用的属性（数据）不存在，要根据已有属性（数据）计算得来。

					2.原理：底层通过Objcet.defineProperty实现的。

					3.优势：与methods实现相比，内部有缓存机制（可以复用），效率更高，且调试方便。

					4.备注：计算属性最终也会出现在vm上，在模板中可直接使用，千万千万不要加()！！！

		 -->
		<!-- 准备好一个容器-->
		<div id="demo">
			<h1>当前的和为：{{n}}</h1>
			<button @click="add">点我n+1</button> <br><br>
			姓：<input type="text" v-model="firstName"> <br><br>
			名：<input type="text" v-model="lastName"> <br><br>
			全名：<span>{{fullName}}</span> <br><br>
			全名：<span>{{fullName}}</span> <br><br>
			全名：<span>{{fullName}}</span> <br><br>
			全名：<span>{{fullName}}</span> <br><br>
		</div>

		<script type="text/javascript">
			//阻止 vue 在启动时生成生产提示。
			Vue.config.productionTip = false
			
			let vm = new Vue({
				el:'#demo',
				data:{
					firstName:'li',
					lastName:'si',
					n:0
				},
				methods:{
					add(){
						this.n += 1
					}
				},
				computed:{
					//fullName这个函数，何时会被调用？—— ①有人读取fullName时。②计算fullName时所依赖的数据发生变化时。
					//fullName这个函数，中的this是谁？—— vm
					fullName(){
						console.log('fullName函数被调用了！')
						return this.firstName.slice(0,1).toUpperCase() + this.firstName.slice(1) + '-' + this.lastName
					}
				}
			})
			// console.log(vm)
		</script>
	</body>
</html>